home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / vbcc / machines / amiga68k / libsrc / amigalib / libfreepooled.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-10-26  |  1.0 KB  |  40 lines

  1. #include <pool.h>
  2.  
  3. VOID LibFreePooled(APTR poolHeader, APTR memory, ULONG memSize)
  4. {
  5.   if (SysBase->LibNode.lib_Version>=39)
  6.     return ((void)FreePooled(poolHeader,memory,memSize));
  7.   else
  8.   {
  9.     if (poolHeader!=NULL && memory!=NULL)
  10.     {
  11.       POOL *pool=(POOL *)poolHeader;
  12.       ULONG *puddle,size;
  13.  
  14.       if (pool->ThreshSize>memSize)
  15.       {
  16.         struct MemHeader *a=(struct MemHeader *)pool->PuddleList.mlh_Head;
  17.  
  18.         for(;;)
  19.          {
  20.            if (a->mh_Node.ln_Succ==NULL)
  21.              return;
  22.            if (memory>=a->mh_Lower && memory<a->mh_Upper)
  23.              break;
  24.            a=(struct MemHeader *)a->mh_Node.ln_Succ;
  25.          }
  26.         Deallocate(a,memory,memSize);
  27.         if (a->mh_Free!=pool->PuddleSize)
  28.           return;
  29.         puddle=(ULONG *)&a->mh_Node;
  30.       }
  31.       else
  32.         puddle=(ULONG *)((struct MinNode *)memory-1);
  33.       Remove((struct Node *)puddle);
  34. /*      size=*(--((ULONG *)puddle)); siehe LibCreatePooled  */
  35.       size=*(--(puddle));
  36.       FreeMem(puddle,size);
  37.     }
  38.   }
  39. }
  40.